package com.zjdiepu.www.convert;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.Converter;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.zjdiepu.www.common.consts.SystemConsts;
import com.zjdiepu.www.common.util.DateUtil;
import com.zjdiepu.www.common.util.NumberUtil;
/**
 * 日期转换
 * 项目名称：diepu-parent-base <br/> 
 * 类名称：MyDateConverter <br/>  
 * 类描述： 日期转换<br/>    
 * 创建人：xiongxiaotun <br/> 
 * 创建时间：2017年8月30日 下午6:09:29  <br/>   
 * 修改人：xiongxiaotun <br/> 
 * 修改时间：2017年8月30日 下午6:09:29   <br/>  
 * 修改备注：    <br/> 
 * @version V1.0   <br/>
 */
public class MyDateConverter implements Converter {
	/**
	 * 短类型日期长度
	 */
	public static final int MIDDLE_DATE = 16;
	
	public static final int SHORT_DATE = 10;
	
	public static final int YEAR_DATE = 4;
	
	public static final int MONTH_DATE = 7;
	
	private Logger logger = LoggerFactory.getLogger(MyDateConverter.class);
	@Override
	@SuppressWarnings("rawtypes")
	public Object convert(Class type, Object text) {
		if(null == text) {
			return null;
		}
		if(text instanceof Date){
			return text;
		}
		if(StringUtils.isBlank(text.toString())) {
			return null;
		}
		String textValue = text.toString().trim();
		String dataFormat = "";
		if (textValue.length() <= YEAR_DATE) {
			dataFormat = SystemConsts.SYS_COMON_DF_YEAR;
		} else  if (textValue.length() <= MONTH_DATE) {
			dataFormat = SystemConsts.SYS_COMON_DF_MONTH;
		} else if (textValue.length() <= SHORT_DATE) {
			if(textValue.indexOf("-") >= 0) {
				dataFormat = SystemConsts.SYS_COMON_DF_SHORT;
			} else {
				dataFormat = SystemConsts.SYS_COMON_DF_SHORT_1;
			}
		} else if(textValue.length() <= MIDDLE_DATE){
			dataFormat = SystemConsts.SYS_COMON_DF_MIDDLE;
		} else {
			dataFormat = SystemConsts.SYS_COMON_DF_LONG;
		}
		long time = 0;
		if(StringUtils.isNotBlank(dataFormat)) {
			try{
				time = new SimpleDateFormat(dataFormat).parse(textValue).getTime();
			} catch (ParseException ex) {
				logger.debug("解析时间出错，text：{}.异常栈：{}", text, ex);
				try { //天数时间
					int days = NumberUtil.covertToInt(Double.parseDouble(textValue));
					return DateUtil.increaseDate(new SimpleDateFormat(SystemConsts.SYS_COMON_DF_SHORT).parse("1899-12-30"), days);
				} catch(NumberFormatException | ParseException e) {
					return null;
				}
			}
		}
		return new Date(time);
	}
}
